<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
class CateController extends Controller
{
    /**
     *  将查询数据库封装静态方法  以便于多次调用
     */
    static public function getCatePid($pid){
        // 更具父级pid条件查询分类表
        $data = DB::table('tbl_types') -> where('pid',$pid)-> get();
        // 定义一个空数组
        $arr = array();
        // 遍历数据库查询出来的结果集资源
        foreach($data as $k => $v){
            $v['sub'] = self::getCatePid($v['id']);
            // 将数据压入数组
            $arr[] = $v;
        }
        // 返回这个数组
        return $arr;
    }


    static public function getCate(){
        // 从数据库取数据  在add页面显示
        $data = DB::table('tbl_types')->select(DB::raw("*,concat(path,',',id) as paths")) -> orderBy('paths') -> get();
        foreach($data as $k => $v){
            //逗号出现的次数
            $l = substr_count($v['path'],',');
            $data[$k]['typename'] = str_repeat('|----',$l).$v['typename'];
        }
        // dd($data);
        return $data;
    }
    /**
     * 商品的无限极分类  添加 
     */
    public function getAdd(Request $request){
        $id = $request->input('id');
        // 加载模版
        return view('admin.cate.add',['data'=>self::getCate(),'id' => $id]);
    }


    public function getList(Request $request){



        //获取设定的分页一页信息条数
        $count = $request->input('count',10);
        //获取查询条件
        $search = $request -> input('search','');
        //查询数据库  按照姓名查询  并按照获取数字值进行分页
        // $info = DB::table('tbl_types')->->paginate($count);

                 // 从数据库取数据  在add页面显示
        $data = DB::table('tbl_types')->select(DB::raw("*,concat(path,',',id) as paths")) -> where('typename','like','%'.$search.'%')-> orderBy('paths')->paginate($count);
        // dd($data->all());
        // var_dump($data);
        // exit;
        $info = $data->all();
        foreach($info as $k => $v){
            //逗号出现的次数
            $l = substr_count($v['path'],',');
            $info[$k]['typename'] = str_repeat('|----',$l).$v['typename'];
        }       

            //对$request所有的值和数据库查询的结果$data进行传值
            return view('admin.cate.list',['data'=>$data,'request'=>$request->all(),'info'=>$info]);            




        
    }


    /**
     * 商品的无限极分类  插入数据
     */
    public function postInsert(Request $request){
        // 判断是否为空 为空则反回添加页面
        if(!$request -> has('typename')){
            return back() -> with('error','操作失败,请重试');
        }
        // 接收提交的数据
        $arr = $request -> only(['typename','pid']);
        // 获取父级pid
        $pid = $request -> input('pid');
        // 判断插入数据父类是否是顶级分类  顶级分类路径为0 否则需要拼接路径
        if($pid == 0){
            // 顶级类路径默认为0
            $arr['path'] = 0;
        }else{
            // 查询要添加数据的父类 
            $res = DB::table('tbl_types')->where('id',$pid)->first();
            // 拼接无限极路径
            $arr['path'] = $res['path'].','.$res['id'];
        }

        // 插入数据
        $a = DB::table('tbl_types') -> insert($arr);
        // 判断插入数据库是否成功,然后跳转添加页
        if($a){
            return redirect('/admin/cate/add') -> with('success','添加成功,请继续操作');
        }else{
            return back() -> with('error','添加失败,请重试');
        }
    }
    /**
     * 无限极分类的删除  当类下边有子类的时候不允许删除
     */
    public function getDelete($id){
        // dd($id);
        // 获取当前分类是否有子类  
        $data = DB::table('tbl_types') -> where('pid',$id) -> first();
        //  对数据库中的数据进行判断
        if($data){
            return back() -> with('error','当前类别有子类,不允许删除');
        }

        $res = DB::table('tbl_types') -> where('id',$id) -> delete();
        if($res){
            return redirect('/admin/cate/list') -> with('success','删除成功,请继续操作');
        }else{
            return back() -> with('error','删除失败,请重试');
        }
    }

}
